// // 已知两个链表 A 和 B 分别为两个集合，其元素递增排列。
// // 请设计一个算法，用于求出 A 与 B 的交集，并存放在 A 链表中。
// #include <stdio.h>
// #include <stdlib.h>
// #include "windows.h"
// //节点结构
// typedef struct LinkNode {
//     int data;
//     struct LinkNode* next;
// }LinkNode;
// //链表结构
// typedef struct LinkList {
//     LinkNode* head;
// }LinkList;
// //链表初始化
// LinkList* LinkInit() {
//     LinkList* list=(LinkList*)malloc(sizeof(LinkList));
//     list->head=(LinkNode*)malloc(sizeof(LinkNode));
//     list->head->next=NULL;
//     return list;
// }
//
// // 插入节点到链表尾部
// void LinkInsert(LinkList* list,int data) {
//     LinkNode* newNode=(LinkNode*)malloc(sizeof(LinkNode));
//     if(newNode==NULL) {
//         perror("malloc");
//     }
//     newNode->data=data;
//     newNode->next=NULL;
//     LinkNode* current=list->head;
//     while (current->next!=NULL) {
//         current=current->next;
//     }
//     current->next=newNode;
// }
// //头插法
// void LinkHeadInsert(LinkList* list,int data) {
//     LinkNode* newNode=malloc(sizeof(LinkNode));
//     if(newNode==NULL) {
//         perror("malloc");
//     }
//     newNode->data=data;
//     newNode->next=list->head->next;
//     list->head->next=newNode;
// }
// //打印链表
// void printLinkList(LinkList* list) {
//     LinkNode* current=list->head->next;
//     while(current!=NULL) {
//         printf("%d ",current->data);
//         current=current->next;
//     }
//     printf("\n");
// }
// // 求两个链表的交集，并存放在链表La中
// void Intersect(LinkList* La, LinkList* Lb) {
//     LinkNode* pa = La->head->next; // La的工作指针
//     LinkNode* pb = Lb->head->next; // Lb的工作指针
//     LinkNode* prev = La->head;     // La的前驱指针
//
//     while (pa != NULL && pb != NULL) {
//         if (pa->data == pb->data) {
//             // 如果两个元素相等，保留La中的元素，删除Lb中的元素
//             prev = pa; // 保留La中的当前节点
//             pa = pa->next; // 移动La的工作指针
//             pb = pb->next; // 移动Lb的工作指针
//         } else if (pa->data < pb->data) {
//             // 如果La中的元素较小，删除La中的当前节点
//             LinkNode* temp = pa;
//             pa = pa->next;
//             prev->next = pa; // 删除当前节点
//             free(temp);
//         } else {
//             // 如果Lb中的元素较小，删除Lb中的当前节点
//             LinkNode* temp = pb;
//             pb = pb->next;
//             free(temp);
//         }
//     }
//
//     // 删除La中剩余的节点
//     while (pa != NULL) {
//         LinkNode* temp = pa;
//         pa = pa->next;
//         prev->next = pa; // 删除当前节点
//         free(temp);
//     }
//
//     // 释放Lb的头结点
//     free(Lb->head);
//     free(Lb);
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     LinkList* La = LinkInit();
//     LinkList* Lb = LinkInit();
//
//     // 插入数据到链表La
//     LinkInsert(La, 1);
//     LinkInsert(La, 3);
//     LinkInsert(La, 5);
//     LinkInsert(La, 7);
//     LinkInsert(La, 9);
//
//     // 插入数据到链表Lb
//     LinkInsert(Lb, 2);
//     LinkInsert(Lb, 3);
//     LinkInsert(Lb, 5);
//     LinkInsert(Lb, 8);
//
//     printf("链表La: ");
//     printLinkList(La);
//     printf("链表Lb: ");
//     printLinkList(Lb);
//
//     // 求交集
//     Intersect(La, Lb);
//
//     printf("交集结果（存放在链表La中）: ");
//     printLinkList(La);
//
//     // 释放链表La的内存
//     LinkNode* current = La->head;
//     while (current != NULL) {
//         LinkNode* next = current->next;
//         free(current);
//         current = next;
//     }
//     free(La);
//     return 0;
// }